home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
TCL1
/
__MANDEL
/
MANDELBR
/
CMANDELP.C2
< prev
next >
Wrap
Text File
|
1992-05-31
|
2KB
|
106 lines
/****
* CMandelPane.c
*
* Copyright ⌐ 1990 Symantec Corporation. All rights reserved.
*
****/
#include "CMandelDoc.h"
#include "CMandelPane.h"
#include "CMandelMap.h"
#include "LongQD.h"
#include <Global.h>
#define itsMandelMap ((CMandelMap *)itsPixMap)
#define itsMandelDoc ((CMandelDoc *)itsSupervisor)
void CMandelPane::IMandelPane(CView *anEnclosure, CBureaucrat *aSupervisor,
short aWidth, short aHeight,
short aHEncl, short aVEncl,
SizingOption aHSizing, SizingOption aVSizing,
CMandelMap *aMandelMap)
{
long i;
CPixMapPane::IPixMapPane(anEnclosure, aSupervisor, aWidth, aHeight,
aHEncl, aVEncl, aHSizing, aVSizing, (CPixMap *)aMandelMap);
SetWantsClicks(TRUE);
}
void CMandelPane::DoClick(Point hitPt, short modifierKeys, long when)
{
double aHOrigin, aVOrigin;
double aPtRatio, aRectRatio;
short aWidth, aHeight;
Rect aRect, aTempRect;
Point aPoint, aLastPt, aOrigin;
KeyMap aKeyMap;
aOrigin.h = hitPt.h;
aOrigin.v = hitPt.v;
itsMandelDoc->QDToReal(aOrigin, &aHOrigin, &aVOrigin);
if ((modifierKeys & cmdKey) != cmdKey)
{
aWidth = itsMandelDoc->GetWidth();
aHeight = itsMandelDoc->GetHeight();
aRectRatio = (double)aWidth / (double)aHeight;
aLastPt = hitPt;
topLeft(aRect) = hitPt;
botRight(aRect) = hitPt;
PenMode(patXor);
FrameRect(&aRect);
while (StillDown())
{
GetMouse(&aPoint);
if (EqualPt(aLastPt, aPoint))
continue;
aWidth = aPoint.h - hitPt.h;
aHeight = aPoint.v - hitPt.v;
aWidth = Abs(aWidth);
aHeight = Abs(aHeight);
aPtRatio = (double)aWidth / (double)aHeight;
if (aPtRatio > aRectRatio)
aHeight = (double)aWidth / aRectRatio;
else
aWidth = (double)aHeight * aRectRatio;
aTempRect.top = hitPt.v - aHeight;
aTempRect.left = hitPt.h - aWidth;
aTempRect.bottom = hitPt.v + aHeight;
aTempRect.right = hitPt.h + aWidth;
FrameRect(&aTempRect);
FrameRect(&aRect);
aRect = aTempRect;
aLastPt = aPoint;
}
FrameRect(&aRect);
PenNormal();
GetKeys(&aKeyMap);
if (BitTst(&aKeyMap, 61)) /* option key */
return;
itsMandelDoc->SetScale(itsMandelDoc->GetScale() *
(((double)aWidth * 2.) / (double)itsMandelDoc->GetWidth()));
}
itsMandelDoc->SetOrigin(aHOrigin, aVOrigin);
itsMandelDoc->DoGenerate();
}
void CMandelPane::AdjustCursor(Point where, RgnHandle mouseRgn)
{
SetCursor(*GetCursor(crossCursor));
}